# 模块和库编程

# 模块就是一个Python文件
# 导入模块
# 格式:import 模块  只能导入一个模块
# 或者: from 模块 import 函数,... 可以指定导入对应函数
# import math
# print(math.e)
# import .. as 别名
# import math as m
# print(m.e)
# from random import random
# print(random())  # 返回0到1之间的随机小数
# from random import *  # 导入全部
# print(randint(3, 9))  # 返回[3, 9]之间的随机整数
# from random import randint as i  # 起别名
# print(i(4, 6))

# 导入模块时，该模块的所有语句均会被执行，然后对应产生一个模块对象，调用此模块名字.就可以访问里面的属性 再次导入还是保持原本模板的导入的属性（做了修改也不会改变）
# dir函数可以查看模块Python为其添加的内置属性__名字__,不带的就是模块里面的变量名
# import math
# print(dir(math))
# 但是注意 import和from一个重要的区别就是第一个在连续导入相同的模块的时候不会覆盖上次修改的结果，但是from就会还原为原本模块的初始值

# 模块搜素路径 sys.path可以查看当前搜素路径设置
# import os
# import sys

# print(sys.path)
# print(os.getcwd())  # 程序当前所在目录

# __name__属性，在自己本身进行独立运行(不是被当作模板导入imort或者from)为"__main__"，否则就是模块主函数的主名字
# import math
# print(__name__)  # "__main__"
# print(math.__name__)

# 包 包是模块文件的目录
# 调用规则：import 文件名.文件名.py文件()不需要带后缀 .表示一级目录(目标必须在Python的搜索路径中)   from 文件名.文件名.文件... import py文件(不需要带后缀)


# Python标准库的学习
# from math import pow
# print(pow(2, 2))
# from math import e
# print(e)

# arr = [1, 2, 3]
# print(arr[-1])

# s = {1, 2, 4, 2}
# print(type(s))
# print(s)

# i = 0
# j = 1
# x = 0
# while (i < 5):
#     x = 4 * j
#     for i in range(0, 5):  # 所以最大不会超过5 记录一人查看下一人
#         if (x % 4 != 0):  # 满足四份才能计算上一个人的剩余部分(能被4整除也就是分了五份 上一个人拿走一份 剩余四份 这四份必须一样)
#             break
#         else:
#             i += 1  # 计算一个人就记录一次从最后一个人开始（编号为0 1 2 3 4 刚好为5）
#         x = (x / 4) * 5 + 1  # 还原前一个人拿完自己那份的剩余部分
#     j += 1  # j存在的目的就是为了让if找到满足四份的条件
# print(x)

# n = 10
# arr = [1, 2, 4]

# if __name__ == '__main__':
#     print("你好呀，py")

# Python的第三方库
# 1.pyinstaller 打包成exe文件指令
# 2.turtle库的应用

import turtle
turtle.setup(500, 300, 200, 200)
turtle.goto(100,100)
turtle.goto(100,-100)
turtle.goto(-100,-100)
turtle.goto(-100,100)
turtle.goto(0,0)